using System;
using System.Collections.Generic;
using System.Text;

namespace cklibirc
{
    public class Channel
    {
        internal Channel()
        {
        }

        private bool _globalChannel = true;
        
        /// <summary>
        /// Flags whether the channel is global or not.
        /// </summary>
        /// <remarks>
        ///  A global channel is a channel with a # infront of it. It's possible to have 
        /// channels localised to a single server. These are prefixed with a &. 
        /// </remarks>
        public bool GlobalChannel
        {
            get
            {
                return _globalChannel;
            }
        }

        private string _name;

        /// <summary>
        /// The name of the channel.
        /// </summary>
        public string Name
        {
            get
            {
                return _name;
            }
        }

        public string _topic = string.Empty;

        /// <summary>
        /// The channel topic.
        /// </summary>
        public string Topic
        {
            get
            {
                return _topic;
            }
            set
            {
                // TODO: Make this actually change the topic.
                _topic = value;
            }
        }

        private List<Person> _joinedPeople;

        public List<Person> JoinedPeople
        {
            get
            {
                return _joinedPeople;
            }
        }


        #region Channel Actions

        public void EnableInviteOnly()
        {

        }

        public void DisableInviteOnly()
        {

        }

        public void EnableModeration()
        {

        }

        public void DisableModeration()
        {

        }

        public void DisableColoursOnChannel()
        {

        }

        public void AllowColours()
        {

        }

        public void Kick(Person person)
        {

        }

        public void BanPerson(Person person)
        {

        }

        public void RemoveBan(Person person)
        {

        }

        public void InvitePerson(Person person)
        {

        }

        public void RemoveInvite(Person person)
        {

        }

        public void GiveOperatorStatus(Person person)
        {

        }

        public void RemoveOperatorStatus(Person person)
        {

        }

        public void RemoveOperatorStatus(Person person)
        {

        }
        

        #endregion

    }
}
